/*!
 * \file WtDtRunner.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief 数据运行器头文件
 * 
 * \details 本文件定义了WonderTrader数据服务系统的数据运行器类WtDtRunner：
 *          - 负责数据服务系统的初始化和运行管理
 *          - 集成基础数据管理器和热点管理器
 *          - 提供数据查询的统一接口
 *          - 管理数据存储和数据管理器
 *          - 支持K线数据和Tick数据的查询服务
 *          - 实现数据服务的生命周期管理
 */
#pragma once
#include "../WTSTools/WTSHotMgr.h"
#include "../WTSTools/WTSBaseDataMgr.h"

#include "WtDataManager.h"

NS_WTP_BEGIN
class WTSVariant;
class WtDataStorage;
class WTSKlineSlice;
class WTSTickSlice;
NS_WTP_END

/**
 * @class WtDtRunner
 * @brief 数据运行器类
 * @details 负责WonderTrader数据服务系统的运行管理：
 *          - 初始化和管理数据服务组件
 *          - 提供数据查询的统一入口
 *          - 集成基础数据和热点数据管理
 *          - 管理数据存储和缓存机制
 *          - 支持多种数据查询方式
 */
class WtDtRunner
{
public:
	/**
	 * @brief 构造函数
	 * @details 初始化数据运行器
	 */
	WtDtRunner();
	
	/**
	 * @brief 析构函数
	 * @details 清理数据运行器资源
	 */
	~WtDtRunner();

public:
	/**
	 * @brief 初始化数据运行器
	 * @details 根据配置文件初始化数据服务系统
	 * @param cfgFile 配置文件路径或配置字符串
	 * @param isFile 是否为文件路径（true=文件路径，false=配置字符串）
	 * @param modDir 模块目录路径
	 */
	void	initialize(const char* cfgFile, bool isFile = true, const char* modDir = "");

	/**
	 * @brief 获取基础数据管理器
	 * @details 返回基础数据管理器的引用
	 * @return WTSBaseDataMgr& 基础数据管理器引用
	 */
	inline WTSBaseDataMgr& getBaseDataMgr() { return _bd_mgr; }
	
	/**
	 * @brief 获取热点管理器
	 * @details 返回热点管理器的引用
	 * @return WTSHotMgr& 热点管理器引用
	 */
	inline WTSHotMgr& getHotMgr() { return _hot_mgr; }

public:
	/**
	 * @brief 按时间范围获取K线数据
	 * @details 根据指定的时间范围查询K线数据
	 * @param stdCode 标准合约代码
	 * @param period K线周期字符串（如"m1", "m5", "d1"等）
	 * @param beginTime 开始时间（时间戳）
	 * @param endTime 结束时间（时间戳，0表示到最新）
	 * @return WTSKlineSlice* K线数据切片
	 */
	WTSKlineSlice*	get_bars_by_range(const char* stdCode, const char* period, uint64_t beginTime, uint64_t endTime = 0);

	/**
	 * @brief 按时间范围获取Tick数据
	 * @details 根据指定的时间范围查询Tick数据
	 * @param stdCode 标准合约代码
	 * @param beginTime 开始时间（时间戳）
	 * @param endTime 结束时间（时间戳，0表示到最新）
	 * @return WTSTickSlice* Tick数据切片
	 */
	WTSTickSlice*	get_ticks_by_range(const char* stdCode, uint64_t beginTime, uint64_t endTime = 0);

	/**
	 * @brief 按数量获取K线数据
	 * @details 从指定结束时间向前查询指定数量的K线数据
	 * @param stdCode 标准合约代码
	 * @param period K线周期字符串（如"m1", "m5", "d1"等）
	 * @param count 查询数量
	 * @param endTime 结束时间（时间戳，0表示最新）
	 * @return WTSKlineSlice* K线数据切片
	 */
	WTSKlineSlice*	get_bars_by_count(const char* stdCode, const char* period, uint32_t count, uint64_t endTime = 0);

	/**
	 * @brief 按数量获取Tick数据
	 * @details 从指定结束时间向前查询指定数量的Tick数据
	 * @param stdCode 标准合约代码
	 * @param count 查询数量
	 * @param endTime 结束时间（时间戳，0表示最新）
	 * @return WTSTickSlice* Tick数据切片
	 */
	WTSTickSlice*	get_ticks_by_count(const char* stdCode, uint32_t count, uint64_t endTime = 0);

private:
	/**
	 * @brief 初始化数据管理器
	 * @details 根据配置初始化数据管理相关组件
	 * @param config 配置参数
	 */
	void	initDataMgr(WTSVariant* config);

private:

	WTSBaseDataMgr	_bd_mgr;		/*!< 基础数据管理器 */
	WTSHotMgr		_hot_mgr;		/*!< 热点管理器 */

	WtDataStorage*		_data_store;	/*!< 数据存储器 */
	WtDataManager		_data_mgr;		/*!< 数据管理器 */

	bool			_is_inited;		/*!< 是否已初始化 */
};

